From: Sebastian Keller Date: Sat, 11 Mar 2017 12:46:10 +0000 (+0100) Subject: weather: Handle GeoClue not responding X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~452 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=ce5875f365b5c615a4bc36479cbd02736703688b;p=gnome-shell.git weather: Handle GeoClue not responding If GeoClue is not responding for some reason, the callback of Geoclue.Simple.new would not get called, meaning that _gclueFailed remains false. This is preventing the fallback to the most recently used location in gnome-weather, because it requires _gclueFailed to be true (or auto-location to be disabled). So neither code path sets a location and the libgweather default (New York City) is being used instead. https://bugzilla.gnome.org/show_bug.cgi?id=779898 --- diff --git a/js/misc/weather.js b/js/misc/weather.js index 2ea90d312..36346adbc 100644 --- a/js/misc/weather.js +++ b/js/misc/weather.js @@ -24,7 +24,7 @@ const WeatherClient = new Lang.Class({ this._gclueService = null; this._gclueStarted = false; - this._gclueFailed = false; + this._gclueStarting = false; this._gclueLocationChangedId = 0; this._world = GWeather.Location.get_world(); @@ -125,21 +125,21 @@ const WeatherClient = new Lang.Class({ }, _startGClueService: function() { - if (this._gclueStarted) + if (this._gclueStarting) return; - this._gclueStarted = true; + this._gclueStarting = true; + Geoclue.Simple.new('org.gnome.Shell', Geoclue.AccuracyLevel.CITY, null, (o, res) => { try { this._gclueService = Geoclue.Simple.new_finish(res); } catch(e) { log('Failed to connect to Geoclue2 service: ' + e.message); - this._gclueFailed = true; this._setLocation(this._mostRecentLocation); return; } - + this._gclueStarted = true; this._gclueService.get_client().distance_threshold = 100; this._updateLocationMonitoring(); }); @@ -163,12 +163,10 @@ const WeatherClient = new Lang.Class({ this._updateLocationMonitoring(); - if (this._useAutoLocation) { - if (!this._gclueStarted) - this._startGClueService(); - } else { + if (this._useAutoLocation) + this._startGClueService(); + else this._setLocation(this._mostRecentLocation); - } }, _onLocationsChanged: function(settings, key) { @@ -183,7 +181,7 @@ const WeatherClient = new Lang.Class({ this._mostRecentLocation = mostRecentLocation; - if (!this._useAutoLocation || this._gclueFailed) + if (!this._useAutoLocation || !this._gclueStarted) this._setLocation(this._mostRecentLocation); } });